package top.bulk.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import top.bulk.component.TxFailureComponent;

import javax.annotation.Resource;

/**
 * 用于测试
 * <p></p>
 * <b>注意，对于事务的测试，不要使用单元测试，单元测试默认会回滚事务，测试起来比较麻烦</b>
 *
 * @author 散装java
 * @version 1.0.0
 * @date 2025-02-15
 */
@RestController
public class TxFailureTestController {

    @Resource
    private TxFailureComponent txFailureComponent;

    /**
     * 测试两个数据源情况下，事务失效
     */
    @GetMapping("/t1")
    public String test1() {
        txFailureComponent.MultipleDataSourcesTx();
        return "ok";
    }

    /**
     * this 调用事务失效
     */
    @GetMapping("/t2")
    public String test2() {
        txFailureComponent.thisTx();
        return "ok";
    }

    /**
     * 捕获的异常不匹配
     */
    @GetMapping("/t3")
    public String test3() {
        txFailureComponent.exceptionTx();
        return "ok";
    }

    /**
     * final 方法事务失效
     */
    @GetMapping("/t4")
    public String test4() {
        txFailureComponent.finalTx();
        return "ok";
    }

    /**
     * 多线程调用事务失效
     */
    @GetMapping("/t5")
    public String test5() {
        txFailureComponent.threadTx();
        return "ok";
    }

    /**
     * 事务传播行为设置错误，导致没有事务
     */
    @GetMapping("/t6")
    public String test6() {
        txFailureComponent.propagationTx();
        return "ok";
    }

    /**
     * 事务传播行为设置错误，导致没有事务
     */
    @GetMapping("/t7")
    public String test7() {
        txFailureComponent.transactionManagerTx();
        return "ok";
    }

    /**
     * 嵌套事务回滚，try 后仍然回滚
     */
    @GetMapping("/t8")
    public String test8() {
        txFailureComponent.nestedTx();
        return "ok";
    }

}
